<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6"/>
<title>libnetconf: Call Home</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="../../libnetconf-logo.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">libnetconf
   &#160;<span id="projectnumber">0.10.0-146_trunk</span>
   </div>
   <div id="projectbrief">NETCONF Library</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
      <li class="current"><a href="../../pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="../../modules.html"><span>Modules</span></a></li>
      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="../../files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="../../search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('da/d4e/callhome.html','../../');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">Call Home </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Call Home is a mechanism how a NETCONF server can initiate connection to a NETCONF client. Specification for this technique can be found in <a href="http://tools.ietf.org/html/draft-ietf-netconf-reverse-ssh-05" title="NETCONF over SSH Call Home Draft">NETCONF over SSH Call Home draft</a> and in <a href="../../hhttp://tools.ietf.org/html/draft-ietf-netconf-rfc5539bis-05" title="RFC 5539bis (NETCONF over TLS)">NETCONF over TLS RFC</a>. Some other aspects of this are also described in <a href="http://tools.ietf.org/html/draft-kwatsen-netconf-server-01" title="NETCONF Server Configuration Data Model">NETCONF Server Configuration Data Model</a>.</p>
<p>This Mechanism is extremely useful especially in case the device (NETCONF server) is deployed behind a NAT and management application is not able to connect (NETCONF client) to such a device.</p>
<p>See the <a href="https://code.google.com/p/netopeer">Netopeer project</a> as a reference implementation.</p>
<h1><a class="anchor" id="callhome-client"></a>
Call Home on the Client Side</h1>
<p>This section describes how to receive Call Home connection.</p>
<p>Because the client usually doesn't except incoming connection, it is necessary to explicitly start listening for Call Home. For this, libnetconf provides <a class="el" href="../../db/de7/group__callhome.html#gafa8e04fb09dcafcd7c06d086e835f25f" title="Start listening on client side for incoming Call Home connection. ">nc_callhome_listen()</a> function that allows to specify port where it will wait for incoming Call Home connections. The function makes the caller listening on all interfaces supporting both, IPv4 and IPv6 addresses. To stop listening, <a class="el" href="../../db/de7/group__callhome.html#ga93a36d2d6c0e1d1eb0c65d70c6ded3cc" title="Stop listening on client side for incoming Call Home connection. ">nc_callhome_listen_stop()</a> can be used.</p>
<p>To get the first connection request from the queue of pending Call Home connections, use <a class="el" href="../../db/de7/group__callhome.html#ga556966a9c54e814e02b4afadf128b9b7" title="Accept incoming Call Home connection and create NETCONF session on it. ">nc_callhome_accept()</a>. It gets incoming Call Home TCP socket and uses it to establish a new NETCONF session according to given parameters similarly to <a class="el" href="../../db/d52/group__session.html#gae3858d998d19cb2fb700b15fdf602f23" title="Create NETCONF session to the specified server. ">nc_session_connect()</a> function.</p>
<p>From this point, client can work with returned NETCONF session as usual. There is no special termination function for NETCONF session from Call Home.</p>
<h1><a class="anchor" id="callhome-server"></a>
Call Home on the Server Side</h1>
<p>For Call Home, the server initiate connection. Therefore, transport protocol must be set before starting Call Home. It is done by <a class="el" href="../../db/d52/group__session.html#ga6e125c035cdebae8c49ff962866c0806" title="Set transport protocol for the sessions created by subsequent nc_session_connect() calls...">nc_session_transport()</a> function.</p>
<p>Next, server is supposed to prepare the list of servers, where libnetconf will be trying to establish the Call Home connection. There is a set of nc_callhome_mngmt_server_*() functions, used for this purpose.</p>
<p>Finally, there is <a class="el" href="../../db/de7/group__callhome.html#ga5c1437b22b1ccac95d0ba15c34912f78" title="Connect NETCONF server to a management center (NETCONF client) using Call Home mechanism. ">nc_callhome_connect()</a> to establish new NETCONF session based on Call Home mechanism. Note, that the function doesn't return a NETCONF session. It forks the process to start a standalone transport protocol server (SSH/TLS) according to the given parameters. It returns PID of the started process and TCP socket used for the communication. This socket can be used for monitoring state of the connection. Do not read any data from this socket.</p>
<h1><a class="anchor" id="callhome-workflow"></a>
Call Home workflow in libnetconf</h1>
<div class="image">
<img src="../../../../img/callhome.png"  alt="callhome workflow" title="Call Home workflow in libnetconf"/>
</div>
 </div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="../../da/d1b/usage.html">Using libnetconf</a></li>
    <li class="footer">Generated on Fri Apr 15 2016 09:20:09 for libnetconf by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="../../doxygen.png" alt="doxygen"/></a> 1.8.6 </li>
  </ul>
</div>
</body>
</html>
